package com.example.houseitemmanagebackend.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.houseitemmanagebackend.dto.ItemDTO;
import com.example.houseitemmanagebackend.dto.ItemQueryDTO;
import com.example.houseitemmanagebackend.vo.ItemVO;
import org.springframework.core.io.Resource;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 物品服务接口
 */
public interface ItemService {

    /**
     * 添加物品
     */
    void addItem(ItemDTO itemDTO);

    /**
     * 更新物品
     */
    void updateItem(ItemDTO itemDTO, Integer userId);

    /**
     * 删除物品
     */
    void deleteItem(Integer id, Integer userId);

    /**
     * 根据ID查询物品
     */
    ItemVO getItemById(Integer id, Integer userId);

    /**
     * 分页查询物品列表
     */
    IPage<ItemVO> getItemPage(ItemQueryDTO queryDTO);

    /**
     * 获取所有物品数据（不分页）
     * 
     * @param locationId 位置ID（可选）
     * @param userId     用户ID
     * @return 物品列表
     */
    List<ItemVO> getAllItems(Integer locationId, Integer userId);

    /**
     * 批量导入物品数据
     * 
     * @param file       上传的Excel或CSV文件
     * @param locationId 位置ID（可选）
     * @param userId     用户ID
     * @return 导入结果，包含成功和失败的记录数
     */
    Map<String, Object> importItems(MultipartFile file, Integer locationId, Integer userId);

    /**
     * 导出物品数据
     * 
     * @param locationId        位置ID（可选）
     * @param format            导出格式（excel或csv）
     * @param includeStock      是否包含库存信息
     * @param includeExpired    是否包含过期信息
     * @param includeCategories 是否包含分类信息
     * @param userId            用户ID
     * @return 导出的文件资源
     */
    Resource exportItems(Integer locationId, String format, Boolean includeStock, Boolean includeExpired,
            Boolean includeCategories, Integer userId);
}